package com.king.juc.n7;

import lombok.extern.slf4j.Slf4j;

import javax.swing.text.DateFormatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;

/**
 * 不可变对象演示
 *
 * @author king
 * @date 2020/12/6 22:06
 */
@Slf4j(topic = "c.ImmutableDemo")
public class ImmutableDemo {
    public static void main(String[] args) {
        // 不可变对象, 线程安全
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                log.debug("{}", dtf.parse("1997-01-01"));
            }).start();
        }
        testSimpleDateFormat();
    }

    /**
     * 可变对象在多线程下造成的线程安全问题
     */
    private static void testSimpleDateFormat() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
//                synchronized (sdf) {
                    try {
                        log.debug("{}", sdf.parse("1997-01-01"));
                    } catch (ParseException e) {
                        log.error("{}", e);
                    }
//                }
            }).start();
        }
    }
}
